YES(O(1),O(n^2)) We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We add following dependency tuples: Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , append#1^#(nil(), @l2) -> c_3() , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(leaf()) -> c_5() , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } and mark the set of starting terms. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , append#1^#(nil(), @l2) -> c_3() , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(leaf()) -> c_5() , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We estimate the number of application of {3,5} by applications of Pre({3,5}) = {1,4}. Here rules are labeled as follows: DPs: { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 3: append#1^#(nil(), @l2) -> c_3() , 4: subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , 5: subtrees#1^#(leaf()) -> c_5() , 6: subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , 7: subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) , 8: subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Weak DPs: { append#1^#(nil(), @l2) -> c_3() , subtrees#1^#(leaf()) -> c_5() } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { append#1^#(nil(), @l2) -> c_3() , subtrees#1^#(leaf()) -> c_5() } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^2)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^2)) We decompose the input problem according to the dependency graph into the upper component { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) } and lower component { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Further, following extension rules are added to the lower component. { subtrees^#(@t) -> subtrees#1^#(@t) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } TcT solves the upper component with certificate YES(O(1),O(n^1)). Sub-proof: ---------- We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { subtrees^#(@t) -> c_4(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_6(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) Due to missing edges in the dependency-graph, the right-hand sides of following rules could be simplified: { subtrees#2^#(@l1, @t1, @t2, @x) -> c_7(subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x), subtrees^#(@t2)) } We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { subtrees^#(@t) -> c_1(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_3(subtrees^#(@t2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 2: subtrees#1^#(node(@x, @t1, @t2)) -> c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) } Trs: { append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1, 2}, Uargs(c_3) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA). [append](x1, x2) = [0] [append#1](x1, x2) = [1] x1 + [1] x2 + [1] [::](x1, x2) = [0] [nil] = [0] [subtrees](x1) = [0] [subtrees#1](x1) = [0] [leaf] = [0] [node](x1, x2, x3) = [1] x2 + [1] x3 + [1] [subtrees#2](x1, x2, x3, x4) = [0] [subtrees#3](x1, x2, x3, x4, x5) = [0] [append^#](x1, x2) = [0] [append#1^#](x1, x2) = [0] [subtrees^#](x1) = [1] x1 + [0] [c_4](x1) = [0] [subtrees#1^#](x1) = [1] x1 + [0] [c_6](x1, x2) = [0] [subtrees#2^#](x1, x2, x3, x4) = [1] x3 + [0] [c_7](x1, x2) = [0] [subtrees#3^#](x1, x2, x3, x4, x5) = [0] [c] = [0] [c_1](x1) = [1] x1 + [0] [c_2](x1, x2) = [1] x1 + [1] x2 + [0] [c_3](x1) = [1] x1 + [0] This order satisfies following ordering constraints [subtrees^#(@t)] = [1] @t + [0] >= [1] @t + [0] = [c_1(subtrees#1^#(@t))] [subtrees#1^#(node(@x, @t1, @t2))] = [1] @t1 + [1] @t2 + [1] > [1] @t1 + [1] @t2 + [0] = [c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1))] [subtrees#2^#(@l1, @t1, @t2, @x)] = [1] @t2 + [0] >= [1] @t2 + [0] = [c_3(subtrees^#(@t2))] Consider the set of all dependency pairs DPs: { 1: subtrees^#(@t) -> c_1(subtrees#1^#(@t)) , 2: subtrees#1^#(node(@x, @t1, @t2)) -> c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , 3: subtrees#2^#(@l1, @t1, @t2, @x) -> c_3(subtrees^#(@t2)) } Processor 'matrix interpretation of dimension 1' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {2}. These cover all (indirect) predecessors of dependency pairs {1,2,3}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Weak DPs: { subtrees^#(@t) -> c_1(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_3(subtrees^#(@t2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { subtrees^#(@t) -> c_1(subtrees#1^#(@t)) , subtrees#1^#(node(@x, @t1, @t2)) -> c_2(subtrees#2^#(subtrees(@t1), @t1, @t2, @x), subtrees^#(@t1)) , subtrees#2^#(@l1, @t1, @t2, @x) -> c_3(subtrees^#(@t2)) } We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded We return to the main proof. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(n^1)). Strict DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Weak DPs: { subtrees^#(@t) -> subtrees#1^#(@t) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } Obligation: innermost runtime complexity Answer: YES(O(1),O(n^1)) We use the processor 'matrix interpretation of dimension 1' to orient following rules strictly. DPs: { 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 5: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , 6: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) } Trs: { append#1(nil(), @l2) -> @l2 } Sub-proof: ---------- The following argument positions are usable: Uargs(c_1) = {1}, Uargs(c_2) = {1}, Uargs(c_8) = {1} TcT has computed following constructor-based matrix interpretation satisfying not(EDA). [append](x1, x2) = [1] x1 + [1] x2 + [0] [append#1](x1, x2) = [1] x1 + [1] x2 + [0] [::](x1, x2) = [1] x2 + [1] [nil] = [1] [subtrees](x1) = [1] x1 + [0] [subtrees#1](x1) = [1] x1 + [0] [leaf] = [1] [node](x1, x2, x3) = [1] x2 + [1] x3 + [1] [subtrees#2](x1, x2, x3, x4) = [1] x1 + [1] x3 + [1] [subtrees#3](x1, x2, x3, x4, x5) = [1] x1 + [1] x2 + [1] [append^#](x1, x2) = [1] x1 + [0] [c_1](x1) = [1] x1 + [0] [append#1^#](x1, x2) = [1] x1 + [0] [c_2](x1) = [1] x1 + [0] [subtrees^#](x1) = [1] x1 + [0] [subtrees#1^#](x1) = [1] x1 + [0] [subtrees#2^#](x1, x2, x3, x4) = [1] x1 + [1] x3 + [0] [subtrees#3^#](x1, x2, x3, x4, x5) = [1] x2 + [0] [c_8](x1) = [1] x1 + [0] This order satisfies following ordering constraints [append(@l1, @l2)] = [1] @l1 + [1] @l2 + [0] >= [1] @l1 + [1] @l2 + [0] = [append#1(@l1, @l2)] [append#1(::(@x, @xs), @l2)] = [1] @l2 + [1] @xs + [1] >= [1] @l2 + [1] @xs + [1] = [::(@x, append(@xs, @l2))] [append#1(nil(), @l2)] = [1] @l2 + [1] > [1] @l2 + [0] = [@l2] [subtrees(@t)] = [1] @t + [0] >= [1] @t + [0] = [subtrees#1(@t)] [subtrees#1(leaf())] = [1] >= [1] = [nil()] [subtrees#1(node(@x, @t1, @t2))] = [1] @t1 + [1] @t2 + [1] >= [1] @t1 + [1] @t2 + [1] = [subtrees#2(subtrees(@t1), @t1, @t2, @x)] [subtrees#2(@l1, @t1, @t2, @x)] = [1] @l1 + [1] @t2 + [1] >= [1] @l1 + [1] @t2 + [1] = [subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x)] [subtrees#3(@l2, @l1, @t1, @t2, @x)] = [1] @l1 + [1] @l2 + [1] >= [1] @l1 + [1] @l2 + [1] = [::(node(@x, @t1, @t2), append(@l1, @l2))] [append^#(@l1, @l2)] = [1] @l1 + [0] >= [1] @l1 + [0] = [c_1(append#1^#(@l1, @l2))] [append#1^#(::(@x, @xs), @l2)] = [1] @xs + [1] > [1] @xs + [0] = [c_2(append^#(@xs, @l2))] [subtrees^#(@t)] = [1] @t + [0] >= [1] @t + [0] = [subtrees#1^#(@t)] [subtrees#1^#(node(@x, @t1, @t2))] = [1] @t1 + [1] @t2 + [1] > [1] @t1 + [0] = [subtrees^#(@t1)] [subtrees#1^#(node(@x, @t1, @t2))] = [1] @t1 + [1] @t2 + [1] > [1] @t1 + [1] @t2 + [0] = [subtrees#2^#(subtrees(@t1), @t1, @t2, @x)] [subtrees#2^#(@l1, @t1, @t2, @x)] = [1] @l1 + [1] @t2 + [0] >= [1] @t2 + [0] = [subtrees^#(@t2)] [subtrees#2^#(@l1, @t1, @t2, @x)] = [1] @l1 + [1] @t2 + [0] >= [1] @l1 + [0] = [subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x)] [subtrees#3^#(@l2, @l1, @t1, @t2, @x)] = [1] @l1 + [0] >= [1] @l1 + [0] = [c_8(append^#(@l1, @l2))] Consider the set of all dependency pairs DPs: { 1: append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , 2: append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , 3: subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) , 4: subtrees^#(@t) -> subtrees#1^#(@t) , 5: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , 6: subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) , 7: subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) , 8: subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) } Processor 'matrix interpretation of dimension 1' induces the complexity certificate YES(?,O(n^1)) on application of dependency pairs {2,5,6}. These cover all (indirect) predecessors of dependency pairs {1,2,3,4,5,6,7,8}, their number of application is equally bounded. The dependency pairs are shifted into the corresponding weak component(s). We apply the transformation 'removetails' on the sub-problem: Weak DPs: { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees^#(@t) -> subtrees#1^#(@t) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } StartTerms: basic terms Strategy: innermost The following weak DPs constitute a sub-graph of the DG that is closed under successors. The DPs are removed. { append^#(@l1, @l2) -> c_1(append#1^#(@l1, @l2)) , append#1^#(::(@x, @xs), @l2) -> c_2(append^#(@xs, @l2)) , subtrees^#(@t) -> subtrees#1^#(@t) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees^#(@t1) , subtrees#1^#(node(@x, @t1, @t2)) -> subtrees#2^#(subtrees(@t1), @t1, @t2, @x) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees^#(@t2) , subtrees#2^#(@l1, @t1, @t2, @x) -> subtrees#3^#(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3^#(@l2, @l1, @t1, @t2, @x) -> c_8(append^#(@l1, @l2)) } We apply the transformation 'usablerules' on the sub-problem: Weak Trs: { append(@l1, @l2) -> append#1(@l1, @l2) , append#1(::(@x, @xs), @l2) -> ::(@x, append(@xs, @l2)) , append#1(nil(), @l2) -> @l2 , subtrees(@t) -> subtrees#1(@t) , subtrees#1(leaf()) -> nil() , subtrees#1(node(@x, @t1, @t2)) -> subtrees#2(subtrees(@t1), @t1, @t2, @x) , subtrees#2(@l1, @t1, @t2, @x) -> subtrees#3(subtrees(@t2), @l1, @t1, @t2, @x) , subtrees#3(@l2, @l1, @t1, @t2, @x) -> ::(node(@x, @t1, @t2), append(@l1, @l2)) } StartTerms: basic terms Strategy: innermost No rule is usable, rules are removed from the input problem. We are left with following problem, upon which TcT provides the certificate YES(O(1),O(1)). Rules: Empty Obligation: innermost runtime complexity Answer: YES(O(1),O(1)) Empty rules are trivially bounded Wall-time: 0.274387s CPU-time: 1.942s Wall-time: 0.629377s CPU-time: 4.287s Hurray, we answered YES(O(1),O(n^2))